import java.util.Scanner;
import java.util.Random;
/**
 * 逻辑控制与方法
 * 1.方法的概念和使用
 * 2.方法重载
 */


public class Test {
    /**
     * 方法重载
     * @param args
     * 方法重载概念
     * 方法签名
     */
    public static void main13(String[] args) {
        //经过编译器编译修改过之后方法最终的名字。具体方式：方法全路径名+参数列表+返回值类型，构成方法完整的名字。

    }
    public static double add(double a,double b) {
        return a + b;
    }
    public static void main12(String[] args) {
        /**
         * 方法重载的概念
         * 1.方法名相同
         * 2.方法参数个数不同 类型不同 顺序不同
         * 3.与返回值是否相同无关
         */
        int a1 = 10;
        int b1 = 20;
        int ret1 = add(a1,b1);
        System.out.println(ret1);

        double a2 = 10.2;
        double b2 = 11.2;
        double ret2 = add(a2,b2);
        System.out.println(ret2);
    }

    /**
     * 方法的概念和使用
     * 1.方法的定义和使用
     * 2.方法的执行过程
     * 3.实参和形参的关系
     * 4.没有返回值的方法
     */
    public static void main11(String[] args) {
        /**
         * 没有返回值的方法
         * 有返回值则使用,return 返回返回值类型变量
         * 如果没有返回值,则注明返回值为空,如果使用return,不能返回值,只能用来表示方法结束,不再执行方面方法体
         */

    }
    public static void swap(int x,int y) {
        int tmp = x;
        x = y;
        y = tmp;
    }

    public static void main10(String[] args) {
        /**
         * 实参和形参的关系
         * 形参是实参的一份临时拷贝,改变形参,不影响实参
         */
        int a = 10;
        int b = 20;

        swap(a,b);

        System.out.print(a + " ");
        System.out.print(b);
    }
    public static int add(int x,int y) {
        return x + y;
    }
    public static void main9(String[] args) {
        /**
         * 方法执行过程
         * 调用方法 传递参数 找到方法地址 执行方法体 结束方法
         * 返回main函数调用方法位置,继续向下执行
         * 注:1.不调用不会执行
         * 2.可以重复多次调用
         * 3.调用时,参数类型一致 传参数顺序一致 参数个数一致
         */
        int a = 10;
        int b = 20;
        int ret = 0;

        ret = add(a,b);

        System.out.println(ret);
    }
    public static void main8(String[] args) {
        /**
         * 方法的定义
         * 语法格式 修饰符 返回类型 方法名(方法参数) {方法体 [return 返回类型]}
         * 1.修饰符当前默认为 public static
         * 2.返回类型,如果要返回,就写相应类型,不返回就注名返回void
         * 3.方法名->小驼峰
         * 4.方法参数,需要传参就写类型和变量名,不传参就不用写
         * 5.方法不存在方法声明,只要在类内定义即可(任意位置)
         * 6.方法不能进行嵌套定义
         * 7.方法必须定义在类中!!!
         */
    }
    /**
     * 输入输出
     * @param args
     */
    /**
     * 输入
     * 单个输入
     * 循环输入
     */
    public static void main7(String[] args) {
        /**
         * 猜数字小游戏
         * Scanner
         * 包 java.util.Scanner
         * 使用:变量.next+大写数据类型首字母()
         * Random
         * 包 java.util.Random
         * 使用: 变量.next+大写数据类型首字母(范围)->[0,100)
         */
        Scanner scanner = new Scanner(System.in);
        int count = 3;
        Random random = new Random();
        int randomNum = random.nextInt(100);
        while(count != 0 ) {
            int num = scanner.nextInt();
            if(num > randomNum) {
                System.out.println("猜大了");
                count--;
                if(count == 0)
                {
                    System.out.println("很遗憾, 您失败了 正确答案为" + randomNum);
                    break;
                }
                System.out.println("还有" + count + "机会");
            }else if(num < randomNum) {
                System.out.println("猜小了");
                count--;
                if(count == 0)
                {
                    System.out.println("很遗憾, 您失败了 正确答案为" + randomNum);
                    break;
                }
                System.out.println("还有" + count + "机会");
            }else {
                System.out.println("猜对了");
                break;
            }
        }
    }
    public static void main(String[] args) {
        /**
         * 循环输入
         * 使用hasNext + 首字母大写类型()作为循环条件
         * 内部需要再次进行读取
         * 注: IDEA以ctrl + d结束循环,cmd以ctrl + z结束循环
         */
        Scanner scanner = new Scanner(System.in);
        //求10个数的平均值
        while(scanner.hasNextInt()) {
            int num = scanner.nextInt();
            System.out.println(num);
        }
    }
    public static void main5(String[] args) {
        /**
         * 输入
         * 单个输入
         * 行输入
         * 字符串输入,遇空格结束读取
         * 其他输入为 变量.next + 首字母大写类型()
         */
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入姓名: ");
//        String name = scanner.nextLine();//行输入
        String name = scanner.next();//字符串输入 遇到空格结束读取
        System.out.println(name);

        System.out.println("请输入年龄: ");
        int age = scanner.nextInt();
        System.out.println(age);

        System.out.println("请输入成绩: ");
        float score = scanner.nextFloat();
        System.out.println(score);

        scanner.close();//关闭资源
    }
    public static void main4(String[] args) {
        /**
         * 输出到控制台
         * 输出且换行 System.out.println
         * 输出不换行 System.out.print
         * 格式化输出 System.out.println()
         */
        System.out.println("输出且换行");
        System.out.print("输出不换行");
        System.out.println();
        System.out.printf("%s\n","格式化输出");
    }
    /**
     * 逻辑控制 -> 循环结构
     * @param args
     */
    public static void main3(String[] args) {
        /**
         * do{循环体}while(布尔表达式);
         * 先执行一次,再判断是否继续执行.
         */
    }
    public static void main2(String[] args) {
        /**
         * for循环
         * 语法格式 for(表达式1;布尔表达式2;表达式3) {结构体}
         * 表达式1为初始化,只执行一次
         * 后续顺序为 2->结构体->3
         */
        for(int i = 0;i <= 9;i++) {
            System.out.print(i + " ");
        }
    }
    public static void main1(String[] args) {
        /**
         * break
         * 直接结束循环,不执行后续所有代码
         */
        /**
         * continue
         * 跳出本次循环,不执行后面的代码
         */
        //打印1-100之间既能被3整除 又能被5整除的数
        int num = 1;
        while(num <= 100) {
            num++;
            if(num % 15 == 0) {
                System.out.println(num);
                continue;
            }
        }
    }
}
